<?php
/**
 * 帮助函数，如果函数信息不存在，则调用这个函数体信息，何为帮助函数，为系统与用户交互的桥梁，将系统中可以用于用户操作的函数，统一归纳到这个地方，供用户调用
 */
namespace Kuoqi;

use Kuoqi;
class Helper
{
    /**
     * @param $n
     * @param null $v
     * @return mixed|null|void
     * User kuoqi
     * Datetime 2022/3/1 16:52
     * Remark config
     */
   static function config($n,$v=null){
        if($v==null){
            return \Kuoqi\Config::get($n);
        }else{
            return \Kuoqi\Config::set($n,$v);
        }
    }

    /**
     * 获取参数信息
     * @param string $param
     * @param null $default
     * @param null $delFunc
     * @param bool $isOpt
     * @return null|string
     * @throws Error
     */
   static function getParam($param = '',$default = NULL,$delFunc = NULL,$isOpt = false){
        $client = Input::initParam($param,$default,$delFunc,$isOpt);
        return Input::outputParam($client);
   }

    /**
     * cache 缓存的通用方法，包含getCache与setCache
     * createby kuoqi at 2022/8/16 23:19
     * @param $cname
     * @param string $cval
     * @param string $ctime
     * @param string $cpath
     * @param bool $isCommon
     * @return mixed|null|string
     */
    static function cache($cname,$cval = '',$ctime = '0',$cpath = '',$isCommon = false){
        if($cval===''){
            return Cache::getCache($cname,$cpath,$isCommon);
        }else{
            return Cache::setCache($cname,$cval,$ctime,$cpath,$isCommon);
        }
    }

    /**
     * 获取cache
     * @param $cname
     * @param $cpath
     * @param $isCommon
     * @return mixed|null
     */
    static function getCache($cname,$cpath = '',$isCommon = false){
        return Cache::getCache($cname,$cpath,$isCommon);
    }

    /**
     * 设置cache
     * @param $cname
     * @param null $cval
     * @param string $ctime
     * @param string $cpath
     * @param bool $isCommon
     * @return string
     */
    static function setCache($cname,$cval = '',$ctime = '0',$cpath = '',$isCommon = false){
        return Cache::setCache($cname,$cval,$ctime,$cpath,$isCommon);
    }


    /**
     * curl方法调用
     */
//    static function curl($curl = '', $method = false, $params = array(), $rsptype = '',$timeout = 0){
//        return Curl::sendTo($curl, $method, $params, $rsptype,$timeout);
//    }

    /**
     * 获取cookie
     */
//    static function getCookie($ckname){
//        return Cookie::getCookie($ckname);
//    }


    //获取参数（1.00.01）


    //助手函数，用于在php程序中，对不确定的数组进行输出值的处理
    //【array】为输入的基础数组，【params】为数组的待输出传，层级使用英文.分割，【defcode】判定如果输入数据不存在时候的默认输出值
//    static function HelperArray($array = array(),$param = '',$defcode = ''){
//        $param = htmlspecialchars($param);
//        $arr = explode('.',$param);
//        $code = \Kuoqi\Format::formatIptFunc($arr,true);
//        $str = sprintf('return isset($array%s)?$array%s:$defcode;',$code,$code);
//        return @eval($str);
//    }

//    static function jsonReturn($config,$message,$data){
//        return Request::jsonReturn($config,$message,$data);
//    }

//    static function Lang($code){
//        return \Kuoqi\Lang::message($code);
//    }
    /*
        *常规日志记录
        *time 2020-09-17
    */
//    static function logs($message,$type='INFO'){
//        return \Kuoqi::Logs($type,$message);
//    }

    /*
        * 使用模型 model
        * createTime : 2020-09-29
    */
//    static function model($mdName,$mdType = 'Model'){
//        return Model::useModel($mdName,$mdType);
//    }

    /**
     * @param $mdName
     * @param string $mdType
     * @return null
     * User kuoqi
     * Datetime 2022/2/28 22:53
     * Remark 模型模块，现在已经不这么使用了，这么使用已经不是最优的了
     */
    static function model($mdName,$mdType = 'Model'){
        return Model::useModel($mdName,$mdType);
    }
    /*
        *mysqk数据库驱动引入
        *time 2020-09-17
    */
    static function Mysql($isPrefix = '',$dateTable = false){
        $client = new \Kuoqi\DbDriver\PdoDriver();
        $client->target('mysql');//配置目标数据库类型
        $client->connect();
        if($dateTable){
            $client->table($isPrefix,$dateTable);
        }elseif($isPrefix){
            $client->table($isPrefix);
        }
        return $client;
    }

    /**
     * url对象信息
     * createby kuoqi at 2022/8/24 11:02
     * @param null $route
     * @param array $params
     * @param bool $isComplex
     * @param bool $isQuerryParms
     * @return mixed|string
     * @throws Error
     */
    static function url($route = NULL,$params = array(),$isComplex = false,$isQuerryParms = false){
        $url = new Url();
        $url->setUrlbyRoute($route,$params);
        $link = $url->execTolink($isComplex);
        return $link;
    }


    /**
     * @param $tkDatas
     * @return string
     * User kuoqi
     * Datetime 2022/3/3 14:16
     * Remark token 创建
     */
    static public function tokenCreate($tkDatas){
        return \Kuoqi\Token::create($tkDatas);
    }

    /**
     * @param $tkname
     * @return mixed
     * User kuoqi
     * Datetime 2022/3/3 14:16
     * Remark 阅读token
     */
    static public function tokenRead($tkname){
        return \Kuoqi\Token::read($tkname);
    }

    /**
     * @param $tkname
     * @return bool|void
     * User kuoqi
     * Datetime 2022/3/3 14:16
     * Remark 销毁token
     */
    static public function tokenDestroy($tkname){
        return \Kuoqi\Token::destroy($tkname);
    }

    /**
     * @param string $priex
     * @return string
     * User kuoqi
     * Datetime 2022/3/10 13:53
     * Remark 配置一个no,简单的获取一个编号信息
     */
    static public function getNumber($priex = ''){
        return $priex .''.date('YmdHis').rand(100,999);

    }
    /**
     * 将字符串转换为密码字符串并返回
     * vbase
     * @param $str
     * @return string
     */
    static function password_encode($str){
        return \Kuoqi\Format::getPassword($str);
    }

    /**
     * session
     * @param $sn
     * @param $sv
     * @return null|void
     */
    static function session($sn,$sv){
        if($sv){
            //设置session
            return \Kuoqi\Session::set($sn,$sv);
        }else{
            //获取session
            return \Kuoqi\Session::get($sn);
        }
    }

    /**
     * 设置session
     * createby kuoqi at 2022/8/24 11:03
     * @param $sn
     * @param $sv
     */
    static public function setSession($sn,$sv){ return \Kuoqi\Session::set($sn,$sv);}

    /**
     * 获取session
     * createby kuoqi at 2022/8/24 11:03
     * @param $sn
     * @return null
     */
    static public function getSession($sn){ return \Kuoqi\Session::get($sn);}
    /**
     * 使用模板
     * @param $layoutId
     * @param array $tplArgs
     * @return string
     * @throws Exception
     * User kuoqi
     * Datetime 2022/4/25 11:12
     * Remark
     */
    static public function useTemplate($layoutId,$tplArgs = array()){
        $layout = \Kuoqi::$app->perfectViewpath($layoutId);
        $fname = $layout.Params::$VIEW_EXT;
        $file = new FileDriver($fname);
        $filecontent = $file->getContent();
        if(!$file->isValied()){
            new Error($file->getError());
        }
        $stream = Interpreter::execCode($filecontent,Kuoqi::$app->getAssigns($tplArgs));
        $tpid = Cache::setTemplate($stream);
        $stream = Cache::getTemplate($tpid,Kuoqi::$app->getAssigns($tplArgs));
        return trim($stream);
    }

    /**
     * 创建token
     */
//    static public function tokenCreate($tkDatas){
//        return \Kuoqi\Token::create($tkDatas);
//    }
    /**
     * 阅读token
     */
//    static public function tokenRead($tkname){
//        return \Kuoqi\Token::read($tkname);
//    }
    /**
     * 销毁token
     */
//    public function tokenDestroy($tkname){
//        return \Kuoqi\Token::destroy($tkname);
//    }

    /*
        *
    */


    /**
     * remark:使用模板
     */
//    static public function useTpl($tplName,$tplArgs = array()){
//        return self::useTemplate($tplName,$tplArgs);
//    }
}